{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.2 机器是怎么学习的？\n",
    "\n",
    "<img src=\"./images/1-2-1.png\" width=\"30%\" ></img>\n",
    "\n",
    "在机器学习中，我们使用数据来训练模型，使其能够解决特定的问题。模型是由许多参数组成的，通过调整这些参数，我们可以让模型在解决问题时更准确、更有效。\n",
    "\n",
    "在训练模型的过程中，我们需要定义一个目标函数，用来衡量模型的表现。目标函数可以是一个损失函数，用来衡量模型预测结果与真实结果之间的差距；也可以是一个指标函数，用来衡量模型预测结果的质量。\n",
    "\n",
    "我们通常会通过最优化算法来优化目标函数，即找到使目标函数取得最小值的模型参数。常见的最优化算法包括梯度下降法、牛顿法、拟牛顿法等。\n",
    "\n",
    "最优化算法的选择取决于模型的类型、目标函数的形式等因素。例如，对于线性回归模型，我们可以使用梯度下降法来优化目标函数；对于深度神经网络模型，我们可以使用拟牛顿法来优化目标函数。\n",
    "总的来说，数据、模型、目标函数、最优化算法之间是任何一个机器学习算法都涉及的重要组成部分。我们使用数据来训练模型，使用目标函数来衡量模型的表现，使用最优化算法来优化目标函数，从而获得较优的模型。学习机器学习算法就是要熟悉不同方法在这四方面都是怎么做的，互相之间有什么区别联系，优缺点和适用条件是什么，如何编程实现等问题。\n",
    "\n",
    "### 1.2.1 数据的重要性\n",
    "数据是机器学习中的基础，它决定了模型的质量和性能。因此，在机器学习中，数据的特点、组成、使用的主要流程等都是非常重要的。\n",
    "\n",
    "1.数据的特点\n",
    "- 数据量大小不一：机器学习中的数据量可能非常大，例如谷歌搜索引擎的数据量达到了每天几千万 GB。但是，也有很多机器学习应用可以使用较小的数据量，例如较小的数据集。针对具体研究的问题选择合适的数据集是非常重要的。很多时候并不是越多越好，而是适合的才是最好的。\n",
    "- 数据类型不一：机器学习中的数据可以是各种类型的，例如数值型数据、类别型数据、文本数据等。\n",
    "- 数据质量不一：机器学习中的数据质量可能不同，例如有些数据可能存在缺失值、异常值、噪声等问题。数据质量的高低会直接影响模型的质量和性能。\n",
    "\n",
    "2.数据的组成\n",
    "\n",
    "机器学习中的数据通常由两部分组成：特征和标签。\n",
    "- 特征（feature）：特征是描述数据的信息。在机器学习中，我们使用特征来解决问题，例如分类、回归等。特征可以是数值型的，例如年龄、身高等；也可以是类别型的，例如性别、种族等。\n",
    "- 标签（label）：标签是数据的结果，也就是我们要预测的结果。例如，在分类问题中，标签可以是类别；在回归问题中，标签可以是数值。\n",
    "\n",
    "3.使用数据的主要流程\n",
    "\n",
    "在机器学习中，我们通常会遵循以下流程使用数据：\n",
    "\n",
    "- 收集数据：首先，我们需要收集机器学习所需的数据。数据可以从各种来源获取，例如网络、文件、数据库等。\n",
    "- 准备数据：收集到的数据通常需要进行预处理，包括缺失值填充、异常值处理、特征提取等。\n",
    "- 分割数据：为了更好地评估模型的性能，我们通常会将数据分为训练集、验证集、测试集三部分。训练集用来训练模型，验证集用来选择模型，测试集用来评估模型性能。\n",
    "- 训练模型：使用训练集训练模型。\n",
    "- 评估模型：使用测试集评估模型性能。\n",
    "- 模型预测：使用训练好的模型预测新数据。\n",
    "\n",
    "![1-2-2.png](./images/1-2-2.png)\n",
    "     \n",
    "### 1.2.2 机器学习模型\n",
    "\n",
    "指用来解决机器学习问题的数学模型。它是由一组参数和相应的算法组成，能够根据输入数据和训练标准，自动学习并做出预测。\n",
    "\n",
    "机器学习模型有几个鲜明的特点：\n",
    "\n",
    "- 自动学习：模型能够自动从数据中学习，而不需要人为设定规则。\n",
    "- 做出预测：模型能够根据输入数据做出预测，而不需要人为干预。\n",
    "- 调整参数：模型的参数可以通过训练调整，以获得更好的性能。\n",
    "\n",
    "机器学习模型研究的内容包括：\n",
    "\n",
    "- 机器学习算法：机器学习模型使用的算法，包括分类算法、回归算法、聚类算法等。\n",
    "- 训练方法：包括监督学习、无监督学习、强化学习等。\n",
    "- 性能评估方法：包括准确率、召回率、F1值、AUC等。\n",
    "\n",
    "深度学习模型是机器学习模型中的一种，它利用多层神经网络来解决机器学习问题。深度学习模型的特点包括：\n",
    "\n",
    "- 处理大量数据：深度学习模型可以处理大量的数据，例如视频、图像等。\n",
    "- 提取复杂特征：深度学习模型可以通过多层神经网络提取出复杂的特征，这些特征可以用来解决复杂的问题。\n",
    "- 自动学习特征：深度学习模型可以自动学习特征，而不需要人为提取。\n",
    "- 解决非线性问题：深度学习模型可以解决非线性的问题，例如图像分类、自然语言处理等。\n",
    "\n",
    "总的来说，深度学习模型是一种高效的机器学习模型，可以解决大量数据、复杂特征、非线性问题。\n",
    "\n",
    "### 1.2.3 目标函数是个啥\n",
    "\n",
    "目标函数是机器学习中用来衡量模型性能的一种指标。它是一个数值函数，能够根据模型的输出和真实值，计算出模型的性能。其意义在于，它可以帮助我们判断模型的性能。例如，如果使用的是分类问题的准确率作为目标函数，就可以根据准确率的大小来判断模型的性能。目标函数可以帮助我们调整模型的参数。例如，如果使用的是回归问题的均方误差（MSE）作为目标函数，就可以根据均方误差的大小来调整模型的参数。\n",
    "\n",
    "在生活当中，也可以使用目标函数来衡量某件事情的性能。例如，可以使用“跑步时间”作为目标函数，来衡量自己跑步的性能。如果想要减少跑步时间，就可以根据跑步时间的大小来调整自己的训练方法。另一个生活中的例子是，可以使用“学习成绩”作为目标函数，来衡量自己的学习效率。如果想要提高学习成绩，就可以根据学习成绩的大小来调整学习方法。\n",
    "\n",
    "总的来说，目标函数是机器学习中非常重要的一个概念。它能够帮助我们判断模型的性能，并且能够帮助我们调整模型的参数。在生活当中，也可以使用目标函数来衡量某件事情的性能，并且根据性能调整自己的方法。\n",
    "\n",
    "### 1.2.4 最优化算法干什么\n",
    "\n",
    "模型有了，目标函数列出来了，怎么用计算机求解呢？最优化算法是机器学习中的一类求解目标函数的方法，用来帮助我们找到模型的最优参数。最优化算法的目的是使得目标函数的值尽可能的小，从而获得最优的模型性能。常用的最优化算法有很多种，其中包括：\n",
    "\n",
    "- 梯度下降法：这是一种基于梯度的最优化算法，它通过迭代调整参数来最小化目标函数。\n",
    "- 随机梯度下降法：这是一种改进版的梯度下降法，它可以在更短的时间内达到最优解。\n",
    "- 牛顿法：这是一种基于函数的二次拟合的最优化算法，它通过迭代调整参数来最小化目标函数。\n",
    "- Adam：这是一种自适应的最优化算法，它可以自动调整学习率，从而达到最优解。现在主流的最优化算法基本上都是在它的基础上发展而来的，也可以说是最常用的一种。\n",
    "\n",
    "在选择最优化算法时，我们通常需要考虑以下几个因素：\n",
    "- 目标函数的类型：不同的目标函数可能适合不同的最优化算法。\n",
    "- 数据的规模：如果数据规模很大，就需要使用更高效的最优化算法。\n",
    "- 运行时间：如果我们需要在短时间内获得最优解，就需要使用更快的最优化算法。\n",
    "\n",
    "总的来说，最优化算法是机器学习中非常重要的一类方法，它能够帮助我们找到最优的模型参数。注意它和机器学习算法本身是不同的，是目标函数的求解方法。在选择最优化算法时，需要考虑目标函数的类型、数据的规模和运行时间等因素，以便选择最合适的最优化算法。\n",
    "\n",
    "最后，值得一提的是，最优化算法不仅在机器学习中使用，在其他领域（如优化工程设计、风险管理等）也有广泛的应用。因此，学习最优化算法不仅能够帮助我们提高机器学习的能力，还能为我们的职业发展打下坚实的基础。当然，这部分内容涉及到的数学很多，不少内容也超出了本课程的范围，本身就是一门非常值得学习的数学分支。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[Next 1-3 机器学习解决哪些问题](./1-3%20%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E8%A7%A3%E5%86%B3%E5%93%AA%E4%BA%9B%E9%97%AE%E9%A2%98.ipynb)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": false,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
